﻿//
// <author>David Nohejl</author>
//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using WPFTrees.DataStructures;
using WPFTrees.Parser;
using System.Windows;
using System.Windows.Shapes;
using System.Windows.Media;

namespace WPFTrees.Layouts
{
    /// <summary>
    /// Interface that every layout algorithm class in WPF Trees implements.
    /// </summary>
    public interface ILayout
    {
        /// <summary>
        /// Lays out tree.
        /// </summary>
        /// <param name="canvas"><see cref="Canvas"/> in which the tree will be
        /// rendered.</param>
        /// <param name="tree">tree to be layed out.</param>
        void ExecuteLayout(Canvas canvas, NTree<NewickNode> tree);

        /// <summary>
        /// Strom ktery se ma nakreslit.
        /// </summary>
        NTree<NewickNode> Tree { get; set; }

        /// <summary>
        /// True pokud nakresleni stromu ma koren.
        /// </summary>
        bool IsRooted { get; }

        /// <summary>
        /// IBranchDrawer pouzity k nakreseni hran.
        /// </summary>
        IBranchDrawer BranchDrawer {get; set;}
    }
}
